package plp.prolog.declaration;


import java.util.ArrayList;

import plp.prolog.memory.AmbienteExecucaoProlog;
import plp.prolog.memory.Utils;

public class Questao {
	
	private Expressao expressao;

	public Questao(Expressao expressao) {
		this.expressao = expressao;
	}
	
	public void avaliar(AmbienteExecucaoProlog ambienteExecucao) {

		ArrayList<Relacao> derivacoes = ambienteExecucao.getListaRelacoes();
		boolean resultado = derivacoes.isEmpty();
		
		for(int index = 0; index < derivacoes.size() && !resultado; index++){
			Relacao relacaoDerivada = derivacoes.get(index);
			
			ambienteExecucao.incrementa();
			resultado = expressao.avaliar(ambienteExecucao, relacaoDerivada);
			if( resultado ){
				ambienteExecucao.printUnificacoes();
			}else{
				//System.out.println(this + " NAO UNIFICOU COM " + relacaoDerivada) ;
			}

			ambienteExecucao.restaura();
		}

		if ( resultado ){
			Utils.imprimir("SIM");
		}else{
			Utils.imprimir("NAO");
		}
	}
	
}
